导航菜单

Etcd

image

Prometheus-Prometheus-Opterator中添加监控etcd集群PS 参考博文 :一文带你快速入门etcd(万字长文)

目录一、Etcd快速入门1.1、 etcd 介绍二、etcd 应用场景2.1、 键值对存储2.2、服务注册与发现2.3、消息发布与订阅2.4、分布式锁三、PromQL查询etcd指标3.1、etcd 节点可用性3.2、请求情况3.3、API Server对etcd 的读写缓存3.4、网络相关3.5、磁盘操作状态3.6、文件3.7、快照

一、Etcd快速入门1.1、 etcd 介绍2013 年 6 月,CoreOS 发起了 etcd 项目。etcd 使用 Go 语言实现,是分布式系统中重要的基础组件,目前最新版本为 V3.4.9。etcd 可以用来构建高可用的分布式键值数据库,根据官网介绍,总结来说有如下的特点:简单:etcd 的安装简单,且为用户提供了 HTTP API,用户使用起来也很简单存储:etcd 的基本功能,数据分层存储在文件目录中,类似于我们日常使用的文件系统Watch 机制:Watch 指定的键、前缀目录的更改,并对更改时间进行通知安全通信:SSL 证书验证高性能:etcd 单实例可以支持 2k/s 读操作,官方也有提供基准测试脚本一致可靠:基于 Raft 共识算法,实现分布式系统数据的高可用性、一致性etcd 是一个分布式键值存储数据库,支持跨平台,拥有强大的社区。etcd 的 Raft 算法,提供了可靠的方式存储分布式集群涉及的数据。etcd 广泛应用在微服务架构和 Kubernates 集群中,不仅可以作为服务注册与发现,还可以作为键值对存储的中间件。从业务系统 Web 到 Kubernetes 集群,都可以很方便地从 etcd 中读取、写入数据。二、etcd 应用场景etcd 在稳定性、可靠性和可伸缩性表现极佳,同时也为云原生应用系统提供了协调机制。etcd 经常用于服务注册与发现的场景,此外还有键值对存储、消息发布与订阅、分布式锁等场景。2.1、 键值对存储如下是官方对 etcd 的描述:A highly-available key value store for shared configuration and service discovery.一个用于配置共享和服务发现的键值存储系统。从其定义来看,etcd 是一个「键值存储」的组件,存储是 etcd 最基本的功能,其他应用场景都是建立在 etcd 的可靠存储上。etcd 的存储有如下特点:采用键值对数据存储,读写性能一般高于关系型数据库;etcd 集群分布式存储,多节点集群更加可靠;etcd 的存储采用类似文件目录的结构:叶子节点存储数据,其他节点不存储,这些数据相当于文件;非叶节点一定是目录,这些节点不能存储数据。比如 Kubernetes 将一些元数据存储在 etcd 中,将存储状态数据的的复杂工作交给 etcd,Kubernetes 自身的功能和架构能够更加专注。2.2、服务注册与发现分布式环境中,业务服务多实例部署,这个时候涉及到服务之间调用,就不能简单使用硬编码的方式指定服务实例信息。服务注册与发现就是解决如何找到分布式集群中的某一个服务(进程),并与之建立联系。服务注册与发现涉及三个主要的角色:服务请求者、服务提供者和服务注册中心。

image

服务提供者启动的时候,在服务注册中心进行注册自己的服务名、主机地址、端口等信息;服务请求者需要调用对应的服务时,一般通过服务名请求服务注册中心,服务注册中心返回对应的实例地址和端口;服务请求者获取到实例地址、端口之后,绑定对应的服务提供者,实现远程调用。etcd 基于 Raft 算法,能够有力地保证分布式场景中的一致性。各个服务启动时注册到 etcd 上,同时为这些服务配置键的 TTL 时间,定时保持服务的心跳以达到监控健康状态的效果。通过在 etcd 指定的主题下注册的服务也能在对应的主题下查找到。为了确保连接,我们可以在每个服务机器上都部署一个 Proxy 模式的 etcd,这样就可以确保访问 etcd 集群的服务都能够互相连接。2.3、消息发布与订阅在分布式系统中,服务之间还可以通过消息通信,即消息的发布与订阅。通过构建一个消息中间件,服务提供者发布对应主题的消息,而消费者则订阅他们关心的主题,一旦对应的主题有消息发布,即会产生订阅事件,消息中间件就会通知该主题所有的订阅者。

image

如微服务架构中的认证鉴权服务,Auth 服务的实例地址、端口和实例节点的状态存放在 etcd 中,客户端应用订阅对应的主题,而 etcd 设置 key TTL 可以确保存储的服务实例的健康状态。2.4、分布式锁分布式系统中涉及到多个服务实例,存在跨进程之间资源调用,对于资源的协调分配,单体架构中的锁已经无法满足需要,需要引入分布式锁的概念。分布式锁可以将资源标记存储,这里的存储不是单纯属于某个进程,而是公共存储,诸如 Redis、Memcache、关系型数据库、文件等。etcd 基于 Raft 算法,实现分布式集群的一致性,存储到 etcd 集群中的值必然是全局一致的,因此基于 etcd 很容易实现分布式锁。分布式锁有两种使用方式:保持独占和控制时序。

image

保持独占,从字面可以知道,所有获取资源的请求,只有一个成功。etcd 通过分布式锁原子操作 CAS 的 API,设置 prevExist 值,从而保证在多个节点同时去创建某个目录时,最后只有一个成功,创建成功的请求获取到锁。控制时序,有点类似于队列缓冲,所有的请求都会被安排分配资源,但是获得锁的顺序也是全局唯一的,执行按照先后的顺序。etcd 提供了一套自动创建有序键的 API,对一个目录的建值操作,这样 etcd 会自动生成一个当前最大的值为键,并存储该值。同时还可以使用 API 按顺序列出当前目录下的所有键值。三、PromQL查询etcd指标3.1、etcd 节点可用性

运行节点的数

sum(up{job="etcd"})

检查节点是否有leader,指标为1 ,表示正常

max(etcd_server_has_leader)

Etcd 的leader角色变化

Leader也会变化,但是过于频繁的变化可能影响etcd本身的性能。这可能是一个信号:由于连接问题leader变得不稳定,或者etcd 负载过重changes(etcd_server_leader_changes_seen_total[1d])3.2、请求情况

etcd gRPC 平均每分钟调用失败率

max(sum(rate(grpc_server_handled_total{grpc_type="unary",grpc_code!="OK"}[1m])) by (grpc_service) / sum(rate(grpc_server_started_total{grpc_type="unary"}[1m])) by (grpc_service) * 100.0)

raft协议的请求(提案):

指标有四个不同类型:committed、applied、pending和failed。以上四种可以提供etcd可能面临的问题的信息,其中最重要的是failed这个状态,如果是failed,则可能有两个原因:或是leader选举失败,或者失去法定节点数。rate(etcd_server_proposals_failed_total{job=~"etcd"}[15m]) etcd_server_proposals_committed_total :已落实共识提案的总数etcd_server_proposals_applied_total :已应用的共识提案总数(etcd_server_proposals_committed_total - etcd_server_proposals_applied_total) >= 1000etcd_server_proposals_pending :前正在处理的请求(提交会议讨论决定的建议) 数量etcd_server_proposals_failed_total :失败提案总数 3.3、API Server对etcd 的读写缓存

缓存中的元素数

etcd_helper_cache_entry_count

缓存命中计数

etcd_helper_cache_hit_count

缓存未命中计数

etcd_helper_cache_miss_count 3.4、网络相关grpc_server_started_total grpc :(高性能、开源的通用RPC(远程过程调用)框架)服务器启动总数etcd_network_client_grpc_received_bytes_total :接收到grpc客户端的字节总数etcd_network_client_grpc_sent_bytes_total :发送给grpc客户端的字节总数etcd_network_peer_received_bytes_total etcd :网络对等方接收的字节总数(对等网络,即对等计算机网络,是一种在对等者(Peer)之间分配任务和工作负载的分布式应用架构,是对等计算模型在应用层形成的一种组网或网络形式)etcd_network_peer_sent_bytes_total etcd :网络对等方发送的字节总数3.5、磁盘操作状态etcd_disk_backend_commit_duration_seconds_sum etcd :磁盘后端提交持续时间秒数总和etcd_disk_backend_commit_duration_seconds_bucket etcd :磁盘后端提交持续时间3.6、文件process_open_fds{service="etcd-k8s"} :打开文件描述符的数量process_max_fds{service="etcd-k8s"} :打开文件描述符的最大数量etcd_disk_wal_fsync_duration_seconds_sum Wal :(预写日志系统)调用的fsync(将文件数据同步到硬盘)的延迟分布etcd_disk_wal_fsync_duration_seconds_bucket :后端调用的提交的延迟分布3.7、快照

etcd快照保存用时

etcd_debugging_snap_save_total_duration_seconds_sum

相关推荐: